home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1995-12-28 | 4.7 KB | 223 lines |
- '
- ' SamLongPlay Procedures V2.0
- '
- ' Written by Christopher Hodges
- '
- Extension_8_0A5E 1
- Trap Extension_8_0956
- Extension_8_0A6E 1
- Extension_8_0A4C 1
- Dim SDAT(3,8)
- Global SDAT()
- Unpack 10 To 0
- For A=0 To 15
- Get Block A+1,A*16,56,16,16
- Next
- Ink 1,3 : Text 12,18,"SamLP V2.0. Written by Chris Hodges."
- Limit Mouse 128,Y Hard(0) To 447,Y Hard(55)
- Led Off : FILT=0
- F$=Command Line$
- If F$<>"" Then Gosub SAMLOAD Else Amos To Front
- Do
- If SAMEXIST and MO=1 and PA=0
- Gosub SAMREPLAY
- Else
- If Amos Here
- Multi Wait
- Gosub CHECKBUTTON
- End If
- End If
- Loop
- SAMREPLAY:
- LL=Min(L,LB)
- If L-LL>0 and L-LL<LB/2 Then LL=LB/2
- Sload V+1 To S+B*LB,LL
- If FL
- Sam Swap VV To S+B*LB,LL
- SAMPL=0
- While Sam Swapped(V)=0
- I$=Inkey$
- If I$=Cup$ : Add FREQ,1000 : SAMPSPEED[15,FREQ] : End If
- If I$=Cdown$ : Add FREQ,-1000 : SAMPSPEED[15,FREQ] : End If
- SAMPL=1
- Multi Wait
- If Amos Here
- Gosub CHECKBUTTON
- End If
- Exit If SHIFT or SHUFT
- Wend
- If SAMPL=0
- Sam Stop VV : Sam Raw VV,S+B*LB,LL,FREQ
- If Amos Here
- Gosub CHECKBUTTON
- End If
- End If
- Else
- Sam Raw VV,S+B*LB,LL,FREQ
- FL=1
- End If
- B=1-B
- If SHUFT=0
- Add L,-LL
- If L=0 : Pof(V+1)=LOP : L=LS-LOP+1 : End If
- Else
- Add L,LL
- If L>=LS : L=LL : End If
- Pof(V+1)=LS-L-LL+1
- End If
- Return
- CHECKBUTTON:
- If Timer>20 Then Timer=0 : Gosub DISPLAY
- XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key
- If MK=2 Then Amos To Back : Return
- If MO=0
- Put Block 5,80,32
- Else
- Put Block 13,80,32
- End If
- If MK=0
- If SHIFT>0
- Put Block 4,64,32
- MO=SHIFT-1
- SHIFT=0
- End If
- If SHUFT>0
- Put Block 6,96,32
- MO=SHUFT-1
- SHUFT=0
- End If
- Return
- End If
- If YM>31 and YM<48 and XM>7 and XM<144
- If XM<24
- Put Block 9,8,32
- If SAMEXIST
- Sam Stop VV
- Close V+1
- Erase BANK
- End If
- Fade 1 : Wait 16
- Extension_8_0966
- End
- End If
- P=(XM-32)/16 : XB=P*16+32
- If P=0
- Put Block 5,80,32
- Put Block 10,XB,32
- If SAMEXIST
- Sam Stop VV
- Close V+1
- Erase BANK
- End If
- F$="" : Gosub SAMLOAD
- Put Block 2,XB,32
- End If
- If P=5
- Put Block 15-PA*8,XB,32
- PA=1-PA
- Repeat : Until Mouse Key=0
- End If
- If P=6
- FILT=1-FILT
- Put Block 8+FILT*8,XB,32
- If FILT=1 : Led On : Else Led Off : End If
- Repeat : Until Mouse Key=0
- End If
- If SAMEXIST=0 : Return : End If
- If P=1 and MO>0
- Put Block 11,XB,32
- Sam Stop VV
- MO=0 : Pof(V+1)=LOP : PA=0 : LL=0
- Put Block 3,XB,32
- End If
- If P=2
- Put Block 12,XB,32
- SHIFT=1+MO
- End If
- If P=3
- MO=1
- End If
- If P=4
- Put Block 14,XB,32
- SHUFT=1+MO
- End If
- End If
- Return
- DISPLAY:
- If SAMEXIST
- A$="TIME: "
- T=(Pof(V+1)-LL)/FREQ
- If T<600 : A$=A$+"0" : End If
- A$=A$+Mid$(Str$(T/60),2)+":"
- If(T mod 60)<10 : A$=A$+"0" : End If
- A$=A$+Mid$(Str$(T mod 60),2)
- If SAMPL or MO=0 or PA=1
- If MO>0 and PA=0 : A$=A$+" PLAYING" : End If
- If MO=0 : A$=A$+" STOPPED" : End If
- If PA : A$=A$+" PAUSED." : End If
- Else
- Ink 6,3 : A$="SAMPLE INTERRUPTED"
- End If
- Ink 1,3 : Text 156,42,A$
- Else
- If SAMPL or MO=0 or PA=1
- Ink 6,3 : Text 156,42," INSERT DISC "
- Else
- Ink 6,3 : Text 156,42,"SAMPLE INTERRUPTED!"
- End If
- End If
- Return
- SAMLOAD:
- SAMEXIST=0 : MO=0 : LL=0
- If F$="" Then Amos To Front : F$=Fsel$("","","Please select a","Sound file")
- If F$="" Then Return
- If Exist(F$)=0 Then Return
- V=0 : BANK=15 : BUF=64 : VV=3
- Volume VV,63
- Erase BANK : Reserve As Chip Work BANK,BUF*1048
- Open In V+1,F$
- LS=Lof(V+1) : LB=BUF*512
- Ink 1,3 : Text 12,18, Extension_8_02F0(F$)+Space$(32-Len( Extension_8_02F0(F$)))
- FREQ=15625
- A$=Input$(1,4) : LOP=0
- If Leek(Varptr(A$))=LS-6
- A$=Input$(1,2)
- FREQ=Deek(Varptr(A$))
- LOP=6
- End If
- If A$="FORM"
- Repeat
- A$=Input$(1,4)
- Until A$="VHDR"
- A$=Input$(1,24)
- FREQ=Deek(Varptr(A$)+16)
- Repeat
- A$=Input$(1,4)
- Until A$="BODY"
- A$=Input$(1,4)
- LOP=Pof(1)
- End If
- Add LS,-Pof(1)
- T=LS/FREQ
- If T<600 Then A$="0" Else A$=""
- A$=A$+Mid$(Str$(T/60),2)+":"
- If(T mod 60)<10 Then A$=A$+"0"
- A$=A$+Mid$(Str$(T mod 60),2)
- Text 268,18,A$
- B=0 : FL=0 : S=Start(BANK) : L=LS
- SAMEXIST=1 : MO=1
- Return
- SAMEND:
- Fill S+B*LB To S+B*LB+LB,0
- Sam Swap VV To S+B*LB,LB
- While Sam Swapped(V)=0 : Wend
- Sam Stop VV
- Close V+1
- Erase BANK
- Return
- Procedure SAMPSPEED[KANAL,FREQ]
- RATE=3579545/FREQ
- For A=0 To 3
- If Btst(A,KANAL) Then Doke $DFF0A6+A*16,RATE
- Next
- End Proc